
public class Item {
	public ItemKind itemKind;
	public String name;
	public String edescription;
	public String description;
	public String animation;
	public int animationTime;
	protected Type type;
	//protected Image??? image.jpg;
	public int price;
	//protected ArrayList<effect> effectsList = new ArrayList<effect>();
	Effect effect;
	
	public Item(ItemKind itemKind) {
		this.itemKind = itemKind;
		switch (itemKind) {
		case WeakPotion:
			name = "Svag Hälsodryck";
			edescription = "Typ som vitaminvatten.";
			description = "Svag hälsokur som regenerar 50 hälsa till användaren.";
			price = 50;
	   		type = null;   		
			effect = new Effect(EffectType.AddHealth, Target.Self, 50, type);
			animation="itemAnimations/weakHealthPotion.gif";
			animationTime=1200;
			break;
		case Lakan:
			name="Lakan";
			edescription = "Ett stort stycke tyg som slängs över djuret för att fånga det.";
			description = "Används för att fånga djur.";
			price = 80;
			type = null;
			effect = new Effect(EffectType.CatchTarget, Target.Other, 0, type);
			animation="";
			animationTime=1200;
			break;
		case Potion:
			name = "Hälsodryck";
			edescription = "Skrubbsår och mindre skador läker helt.";
			description = "Hälsokur som regenerar 200 hälsa till användaren.";
			price = 200;
	   		type = null;   		
			effect = new Effect(EffectType.AddHealth, Target.Self, 200, type);
			animation="itemAnimations/weakHealthPotion.gif";
			animationTime=1200;

			break;
		case StrongPotion:
			name = "Stark Hälsodryck";
			edescription = "Stänger öppna sår. Innehåller inga tillsatser.";
			description = "Effektiv hälsokur som regenerar 400 hälsa till användaren.";
			price = 500;
	   		type = null;   		
			effect = new Effect(EffectType.AddHealth, Target.Self, 350, type);
			animation="itemAnimations/weakHealthPotion.gif";
			animationTime=1200;
			break;
		case MegaPotion:
			name = "Kraftfull Hälsodryck";
			edescription = "Brutna ben rätas till och läker ihop. Flaskan lyser i rött.";
			description = "Effektiv hälsokur som regenerar 600 hälsa till användaren.";
			price = 1000;
	   		type = null;   		
			effect = new Effect(EffectType.AddHealth, Target.Self, 500, type);
			animation="itemAnimations/weakHealthPotion.gif";
			animationTime=1200;
			break;
		case BrassKey:
			name = "Bronsnyckel";
			edescription = "En gammal nyckel av brons. Jag undrar vilka hemligheter den låser upp.";
			description =  "En gammal nyckel av brons. Jag undrar vilka hemligheter den låser upp.";
			price = 250;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case SilverKey:
			name = "Silvernyckel";
			edescription = "En nyckel av silver. Den måste låsa upp något viktigt.";
			description = "En nyckel av silver. Den måste låsa upp något viktigt.";
			price = 1000;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case GoldenKey:
			name = "Gyllene nyckel";
			edescription = "En guld nyckel. Den måste låsa upp något viktigt.";
			description = "En nyckel av guld. Den är förmodligen värd mer än innehållet i dess kista.";
			price = 5000;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case DiamondKey:
			name = "Diamantnyckel";
			edescription = "En diamantnyckel. Det måste låsa upp något viktigt.";
			description = "En diamantnyckel. Såååå glänsande.";
			price = 10000;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case Telescope:
			name = "Telescope";
			edescription = "Titta genom denna och du ser världens alla hörn.";
			description = "Titta genom denna och du ser världens alla hörn.";
			price = 300;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case Tent:
			name = "Tent";
			edescription = "Du känner dig förvånansvärt säker i den.";
			description = "Du känner dig förvånansvärt säker i den.";
			price = 500;
			effect = null;
			type = null;
			animation="";
			animationTime=0;
			break;
		case SpeedX:
			name = "SpeedX";
			edescription = "Adds temporary speed boost. Pet becomes 10% faster.";
			description = "Ökar din snabbhet umder striden.";
			price = 100;
			type = null;
			effect = new Effect(EffectType.AddSpeed, Target.Self, 7,type);
			animation="/itemAnimations/speedX.gif";
			animationTime=400;
			break;
		case SpeedMX:
			name = "SpeedMX";
			edescription = "Adds temporary speed boost. Pet becomes 10% faster.";
			description = "Ökar din snabbhet umder striden.";
			price = 200;
			type = null;
			effect = new Effect(EffectType.AddSpeed, Target.Self, 20,type);
			animation="/itemAnimations/speedX.gif";
			animationTime=400;
			break;
		case DefenseX:
			name = "DefenceX";
			edescription = "Temporarily increases your maxhealth by 10%.";
			description = "Ökar din maximala hälsa under striden.";
			type = null;
			price = 40;
			effect = new Effect(EffectType.AddDefense, Target.Self, 7, type);
			animation="";
			animationTime=0;
			break;
		case DefenseMX:
			name = "DefenceMX";
			edescription = "Temporarily increases your maxhealth by 10%.";
			description = "Ökar din maximala hälsa under striden.";
			type = null;
			price = 100;
			effect = new Effect(EffectType.AddDefense, Target.Self, 20, type);
			animation="";
			animationTime=0;
			break;
		case SizeX:
			name = "SizeX";
			edescription = "Your pet becomes larger, because size does matter.";
			description = "Ökar husdjurets storlek under striden.";
			price = 160;
			type = null;
			effect = new Effect(EffectType.AddSize, Target.Self, 7, type);
			animation="";
			animationTime=0;
			break;
		case SizeMX:
			name = "SizeX";
			edescription = "Your pet becomes larger, because size does matter.";
			description = "Ökar husdjurets storlek under striden.";
			price = 200;
			type = null;
			effect = new Effect(EffectType.AddSize, Target.Self, 20, type);
			animation="";
			animationTime=0;
			break;
		case StrengthX:
			name = "StrengthX";
			edescription = "Your pet becomes stronger.";
			description = "Ökar din styrka under striden.";
			price = 160;
			type = null;
			effect = new Effect(EffectType.AddStrength, Target.Self, 7, type);
			animation="";
			animationTime=0;
			break;
		case StrengthMX:
			name = "StrengthMX";
			edescription = "Your pet becomes stronger.";
			description = "Ökar din styrka under striden.";
			price = 260;
			type = null;
			effect = new Effect(EffectType.AddStrength, Target.Self, 20, type);
			animation="";
			animationTime=0;
			break;
			/*
		case NiggaStoleMyBike:
			name = "NiggaStoleMyBike";
			edescription = "Niggah stole your mutherfucking bike.";
			description = "Någon  neger stal din cykel.";
			price = 160;
			type = null;
			effect = new Effect(EffectType.AddStrength, Target.Self, 7, type);
			animation="";
			animationTime=0;
			break;*/
		default:
			throw new UnsupportedOperationException("That effect is not implemented yet!");
		
		}
	}
	
	public int buyprice() {
		return price;
	}
	
	public int sellprice() {
		return (int) (price*0.7);
	}
	
	public ItemKind getKind() {
		return itemKind;
	}
	
	public String getName() {
		return name;
	}
	
	public String getedescription() {
		return edescription;
	}
	

	/*
	 * omdefiniering av equals-metoden för att kunna
	 * jämföra föremål baserat på deras namn istället för
	 * instansreferens. (mostly copypasta.)
	 */
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		} else if (obj instanceof Item) {
			Item i2 = (Item) obj;
			if (this.getName() == i2.getName()) {
				return true;
			}
			else {
				return false;
			}
		} else {
			return false;
		}
	}
	
	/*
	 * Hash code för ett item är i princip hash code för dess namn,
	 * eftersom två items med samma namn ska ha samma hash code!
	 */
	public int hashCode() {
		return this.getName().hashCode();
	}
	
	public String getAnimation(){
		return this.animation;
	}
}
